package com.cyy.heap;

/**
 * 堆的接口
 * @author 会玩的洋洋
 * @since 2022-03-01
 * @param <E>
 */
public interface Heap<E> {
    /**
     * 堆内元素数量
     * @return int
     */
    int size();

    /**
     * 堆是否为空
     * @return boolean
     */
    boolean isEmpty();

    /**
     * 清空堆中元素
     */
    void clear();

    /**
     * 添加元素
     * @param element 元素
     */
    void add(E element);

    /**
     * 获取堆顶元素
     * @return E 堆顶元素
     */
    E get();

    /**
     * 删除堆顶元素
     * @return E 堆顶元素
     */
    E remove();

    /**
     * 删除堆顶元素的同时插入一个元素
     * @param element 插入的元素
     * @return E 删除的元素
     */
    E replace(E element);
}
